/*
https://cloud.tencent.com/document/product/382/68853
https://console.cloud.tencent.com/api/explorer?Product=sms&Version=2021-01-11&Action=SendSms
*/

#include <tencentcloud/core/Credential.h>
#include <tencentcloud/core/profile/ClientProfile.h>
#include <tencentcloud/core/profile/HttpProfile.h>
#include <tencentcloud/sms/v20210111/SmsClient.h>
#include <tencentcloud/sms/v20210111/model/SendSmsRequest.h>
#include <tencentcloud/sms/v20210111/model/SendSmsResponse.h>
#include <iostream>
#include <string>
#include <vector>

using namespace TencentCloud;
using namespace TencentCloud::Sms::V20210111;
using namespace TencentCloud::Sms::V20210111::Model;
using namespace std;

int main() {
    // 实例化一个认证对象，入参需要传入腾讯云账户 SecretId 和 SecretKey，此处还需注意密钥对的保密
    // 代码泄露可能会导致 SecretId 和 SecretKey 泄露，并威胁账号下所有资源的安全性
    // 以下代码示例仅供参考，建议采用更安全的方式来使用密钥
    // 请参见：https://cloud.tencent.com/document/product/1278/85305
    // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
    std::string access_key_id = "AKIDPjspcGm5B6281h9zf8OSJ0Vu9B4kDSZg";
    std::string access_key_secret = "UovEUZUEm7GByazFJG1Zu3zhCXigRCmB";
    Credential cred = Credential(access_key_id, access_key_secret);
    // 使用临时密钥示例
    // Credential cred = Credential("SecretId", "SecretKey", "Token");
    // 实例化一个http选项，可选的，没有特殊需求可以跳过
    HttpProfile httpProfile = HttpProfile();
    httpProfile.SetEndpoint("sms.tencentcloudapi.com");

    // 实例化一个client选项，可选的，没有特殊需求可以跳过
    ClientProfile clientProfile = ClientProfile();
    clientProfile.SetHttpProfile(httpProfile);
    // 实例化要请求产品的client对象,clientProfile是可选的
    SmsClient client = SmsClient(cred, "", clientProfile);

    // 实例化一个请求对象,每个接口都会对应一个request对象
    SendSmsRequest req = SendSmsRequest();
    
    // 返回的resp是一个SendSmsResponse的实例，与请求对象对应
    auto outcome = client.SendSms(req);
    if (!outcome.IsSuccess())
    {
        cout << outcome.GetError().PrintAll() << endl;
        return -1;
    }
    SendSmsResponse resp = outcome.GetResult();
    // 输出json格式的字符串回包
    cout << resp.ToJsonString() << endl;

    return 0;
}